package com.testing.mysql;

import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.*;
import java.util.List;

/**
 * @Classname MysqlPrTest
 * @Description 类型说明
 * @Date 2021/9/11 20:29
 * @Created by 特斯汀Roy
 */
public class MysqlPrTest {
    public static void main(String[] args) throws Exception {
        String user="a' or 1=1#";
        String password="1234567890";
        //调用getResourceAsStream,将resources目录中的文件，读取为输入流，能够被java进行处理
        InputStream resourceAsStream = MysqlPrTest.class.getResourceAsStream("/mysql.properties");
        Properties mysql=new Properties();
        mysql.load(resourceAsStream);
        String mysqlurl = mysql.getProperty("mysqlurl");
        String mysqluser = mysql.getProperty("mysqluser");
        String mysqlpwd = mysql.getProperty("mysqlpwd");
        System.out.println(mysqlurl);
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(mysqlurl, mysqluser, mysqlpwd);
        //调用存储过程,使用?来代表存储过程中的参数
        CallableStatement callableStatement = connection.prepareCall("call login(?,?)");
        //设置存储过程使用的参数
        callableStatement.setString("user",user);
        callableStatement.setString(2,password);
        ResultSet resultSet = callableStatement.executeQuery();
//        if(resultSet!=null && resultSet.next()){
//            System.out.println(resultSet.getString("username"));
//        }else{
//            System.out.println("没有查询到数据");
//        }

        //5、处理结果集，拿出查询的结果来。
        //获取表头行的信息
        ResultSetMetaData headerInfo = resultSet.getMetaData();
        //获取每一行一共有多少列
        int count = headerInfo.getColumnCount();
        //如果结果集不为空并且右下一行结果，取出来。
        List<Map<String, String>> resultList = new ArrayList<>();
        //遍历每一行
        while (resultSet != null && resultSet.next()) {
            //每一行存一个map
            Map<String, String> lineMap = new HashMap<>();
            //根据列名获取值
//            System.out.println(resultSet.getString("username"));
//            //根据列序号获取值
//            System.out.println(resultSet.getString(1));
//            System.out.println(resultSet.getString(2));
            //遍历每一列，并且还要获取列名,循环每一列来进行存储
            //获取查询到的结果有哪些列，获取表头行的信息中的列数以及列名来进行存储
            for (int i = 1; i <= count; i++) {
                System.out.println(headerInfo.getColumnName(i) + "的值是" + resultSet.getString(i));
                lineMap.put(headerInfo.getColumnName(i), resultSet.getString(i));
            }
            //遍历完每一列之后，map就存完了。
            resultList.add(lineMap);
        }
        System.out.println(resultList);


    }
}
